package cn.csc.module.product.service.spu;

import cn.csc.framework.common.pojo.PageResult;
import cn.csc.module.product.controller.admin.spu.vo.*;
import cn.csc.module.product.controller.app.spu.vo.AppSpuCreateReqVO;
import cn.csc.module.product.dal.dataobject.spu.SpuDO;

import javax.validation.Valid;
import java.math.BigInteger;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * spu信息 Service 接口
 *
 * @author liuchuang
 */
public interface SpuService {

    /**
     * 创建spu信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    BigInteger createSpu(@Valid SpuCreateDataReqVO createReqVO);

    /**
     * 更新spu信息
     *
     * @param createReqVO 更新信息
     */
    void updateSpu(@Valid SpuCreateDataReqVO createReqVO);

    /**
     * 审核商品
     * @param updateReqVO
     */
    void verifySpu(SpuUpdateReqVO updateReqVO);

    /**
     * 加入企业购
     * @param list
     */
    void addShopSpuBatch(@Valid List<SpuShopDataReqVO> list);

    /**
     * 加入企业购
     * @param createReqVO
     */
    void addShopSpu(@Valid SpuShopDataReqVO createReqVO);

    /**
     * 后台上下架
     * @param updateReqVO
     */
    void updateShelf(SpuUpdateReqVO updateReqVO);

    /**
     * 小程序端上下架
     * @param updateReqVO
     */
    void  onShelf(SpuUpdateReqVO updateReqVO);

    /**
     * 删除spu信息
     *
     * @param id 编号
     */
    void deleteSpu(BigInteger id);

    /**
     * 获得spu信息
     *
     * @param id 编号
     * @return spu信息
     */
    SpuDO getSpu(BigInteger id);

    /**
     * 获得spu信息列表
     *
     * @param ids 编号
     * @return spu信息列表
     */
    List<SpuDO> getSpuList(Collection<BigInteger> ids);

    /**
     * 获得spu信息分页
     *
     * @param pageReqVO 分页查询
     * @return spu信息分页
     */
    PageResult<SpuDO> getSpuPage(SpuPageReqVO pageReqVO);

    /**
     * 获得spu信息分页
     *
     * @param pageReqVO 分页查询
     * @return spu信息分页
     */
    PageResult<SpuDO> selectPageByOnLineTimeDesc(SpuPageReqVO pageReqVO);


    /**
     * 获得spu信息分页
     *
     * @param pageReqVO 分页查询
     * @return spu信息分页
     */
    PageResult<SpuDO> getSpuPageSingle(SpuPageReqVO pageReqVO);


    /**
     * 获得spu信息列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return spu信息列表
     */
    List<SpuDO> getSpuList(SpuExportReqVO exportReqVO);

    /**
     * 获取spu全部详情
     * @param id
     * @return
     */
    SpuDataRespVO getSpuById(BigInteger id);

    /**
     * 根据店铺id查询审核通过的商品有多少个
     * @param shopId
     * @return
     */
    Long selectOKSpuNum(BigInteger shopId);

    /**
     * 根据店铺id列表查询各店铺审核通过的商品有多少个
     * @param list 店铺id列表
     * @return
     */
    Map<String, Object> getSkuCountByShopIds(List<BigInteger> list);

    /**
     * 选品创建商品
     * @param reqVO 参数
     * @return
     */
    BigInteger appCreateSpuV2(AppSpuCreateReqVO reqVO);


}
